iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0

接下來我們可以將資料作前處理。一是做convolution,或是特定特徵的filter,二是壓縮。方法就像之前加hidden layer一樣,我們只要在model中依序加入想要的設定,如下例子:

# Define the model
model = tf.keras.models.Sequential([
                                                         
  # Add convolutions and max pooling
  tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)),
  tf.keras.layers.MaxPooling2D(2, 2),
  tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
  tf.keras.layers.MaxPooling2D(2,2),

  # Add the same layers as before
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])
# The parameters are:
# 1. The number of convolutions you want to generate. The value here is purely arbitrary but it's good to use powers of 2 starting from 32.
# 2. The size of the Convolution. In this case, a 3x3 grid.
# 3. The activation function to use. In this case, you used a ReLU, which you might recall is the equivalent of returning x when x>0, else return 0.
# 4. In the first layer, the shape of the input data.

我們可以用summary來看各個layer資料的變化,由於conv2D的陣列大小是3x3,所以兩側最邊緣的那個pixel會失效,所以陣列大小會是原本的-2,而最後一個值32是我們在Conv2D時的第一個參數,會產生32張結果,MaxPooling是在每個2x2陣列中取最大值留下來,所以陣列大小會是原本的除2取最小整數,這就有壓縮資料的效果:

# Print the model summary
model.summary()

Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0
conv2d_1 (Conv2D) (None, 11, 11, 32) 9248
max_pooling2d_1 (MaxPooling2D) (None, 5, 5, 32) 0
flatten (Flatten) (None, 800) 0
dense (Dense) (None, 128) 102528
dense_1 (Dense) (None, 10) 1290
=================================================================

我們同樣可以將convolution後的結果找幾張圖畫出來,就可以看出效果,特定參數的convolution就是常見的濾鏡一樣,例如邊緣銳利化、柔和、去顆粒等,這可以視應用而定,或是就掃下去用convolution看是否會抓到特徵,以下3張圖都是編號為9類型的圖,從左至右依序是原始圖、第一次convolution後的結果,maxpooling後的結果,第二次convolution後的結果,再次maxpooling後的結果:
https://ithelp.ithome.com.tw/upload/images/20220908/20141158GtYqDm0FWJ.png

此外,每次跑的結果都是不同的,這是另一次的結果:
https://ithelp.ithome.com.tw/upload/images/20220908/20141158gsgTXvIUEB.png

我想大家這時心中都會有個疑問,這最後的結果都已經看不出個所以然了,那這樣是否效果加太強?以5次epoch後的結果,loss是0.22,但training的時間變長,所以加了4層這是有improve的嗎?目前沒有想法,就讓我們例題繼續做下去…


上一篇
Day2 新手村的練習課程-我不是機器人?
下一篇
Day4 新手村的練習課程- 機器人幼稚園第一堂課,你是人是馬?
系列文
來創造一個AI角色吧-新手的探尋之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言